package dao;

import com.sun.tracing.dtrace.ProviderAttributes;
import domain.User;
import org.apache.ibatis.annotations.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

public interface UserDao {
    List<User> getAllUser();

    User getUserByAccount(String account);

    Integer addUser(User user);

    Integer updateUser(User user);

    Integer deleteUserByAccount(String account);

    User getUserByMap(Map<String, Object> map);

    List<User> getUserLike(HashMap<String, Object> map);

    List<User> getUserByRowBound();

    @Select("select * from user")
        // 本质上使用了反射机制,底层为动态代理.
    List<User> getUsers();

    // 可以有多个参数,每一个参数前面都要加上 @Param
    @Select("select * from user where user.account=#{account}")
    User getUserByAcc(@Param("account") String account);

    @Insert("insert into user(account,name,sex,password) values (#{acc},#{name},#{sex},#{psw})")
    int insertUser(@Param("acc") String acc, @Param("name") String name,
                   @Param("sex") String sex, @Param("psw") String psw);

    @Delete("delete from user where user.account=#{acc}")
    int removeUserByAcc(@Param("acc") String acc);

    @Update("update user set user.name=#{name},user.sex=#{sex} where user.account=#{acc}")
    int updateUserByAcc(@Param("acc") String acc, @Param("name") String name, @Param("sex") String sex);
}
